package main

import "fmt"

//class Duck{
//	birthday timestamp
//	legs int
//	mouth int
//}
// 鸭子类型强调的事务的外部行为，而不是内部的结构

// 接口的定义
type Duck interface {
	// 方法的声明
	Gaga()
	Walk()
	Swimming()
}

type pskDuck struct {
	legs int
}

func (pd *pskDuck) Gaga() {
	fmt.Println("嘎嘎")
}

func (pd *pskDuck) Walk() {
	fmt.Println("this is pskduck walking")
}

func (pd *pskDuck) Swimming() {
	fmt.Println("this is pskduck Swimming")
}

func main() {
	// go 语言接口, 鸭子类型, php,python(动态语言)
	// go语言中处处都是interface，导出都是鸭子类型Duck typing
	/*
		当看到一只鸟走起来像鸭子，游泳起来像鸭子、叫起来也像鸭子， 那么这只鸟就是鸭子
		动词，方法，具备某些方法
	*/
	// var duck Duck // *多态 看他是不是duck类型的实例
	var d Duck = &pskDuck{}
	d.Walk()
}
